{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from math import ceil\n",
    "import torch\n",
    "from torch.utils.data import DataLoader\n",
    "from torch.autograd import Variable\n",
    "import torch.optim as optim\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "import sys\n",
    "sys.path.append('..')\n",
    "from utils.input_pipeline import get_image_folders\n",
    "from utils.training import train\n",
    "from utils.quantization import optimization_step, quantize, initial_scales\n",
    "\n",
    "torch.cuda.is_available()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "torch.backends.cudnn.benchmark = True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "LEARNING_RATE = 1e-3  # learning rate for all possible weights\n",
    "HYPERPARAMETER_T = 0.05  # hyperparameter for quantization"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Create data iterators"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 512"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "100000"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_folder, val_folder = get_image_folders()\n",
    "\n",
    "train_iterator = DataLoader(\n",
    "    train_folder, batch_size=batch_size, num_workers=4,\n",
    "    shuffle=True, pin_memory=True\n",
    ")\n",
    "\n",
    "val_iterator = DataLoader(\n",
    "    val_folder, batch_size=256, num_workers=4,\n",
    "    shuffle=False, pin_memory=True\n",
    ")\n",
    "\n",
    "# number of training samples\n",
    "train_size = len(train_folder.imgs)\n",
    "train_size"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from get_densenet import get_model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "model, loss, optimizer = get_model(learning_rate=LEARNING_RATE)\n",
    "\n",
    "# load pretrained model, accuracy ~48%\n",
    "model.load_state_dict(torch.load('../vanilla_densenet_small/model.pytorch_state'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### keep copy of full precision kernels"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "# copy almost all full precision kernels of the model\n",
    "all_fp_kernels = [\n",
    "    Variable(kernel.data.clone(), requires_grad=True) \n",
    "    for kernel in optimizer.param_groups[1]['params']\n",
    "]\n",
    "# all_fp_kernels - kernel tensors of all convolutional layers \n",
    "# (with the exception of the first conv layer)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### initial quantization "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# scaling factors for each quantized layer\n",
    "initial_scaling_factors = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# these kernels will be quantized\n",
    "all_kernels = [kernel for kernel in optimizer.param_groups[1]['params']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "for k, k_fp in zip(all_kernels, all_fp_kernels):\n",
    "    \n",
    "    # choose initial scaling factors \n",
    "    w_p_initial, w_n_initial = initial_scales(k_fp.data)\n",
    "    initial_scaling_factors += [(w_p_initial, w_n_initial)]\n",
    "    \n",
    "    # do quantization\n",
    "    k.data = quantize(k_fp.data, w_p_initial, w_n_initial, t=HYPERPARAMETER_T)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### parameter updaters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "# optimizer for updating only all_fp_kernels\n",
    "optimizer_fp = optim.Adam(all_fp_kernels, lr=LEARNING_RATE)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "# optimizer for updating only scaling factors\n",
    "optimizer_sf = optim.Adam([\n",
    "    Variable(torch.FloatTensor([w_p, w_n]).cuda(), requires_grad=True) \n",
    "    for w_p, w_n in initial_scaling_factors\n",
    "], lr=LEARNING_RATE)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "196"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from torch.optim.lr_scheduler import ReduceLROnPlateau\n",
    "\n",
    "class lr_scheduler_list:\n",
    "    \"\"\"ReduceLROnPlateau for a list of optimizers.\"\"\"\n",
    "    def __init__(self, optimizer_list):\n",
    "        self.lr_scheduler_list = [\n",
    "            ReduceLROnPlateau(\n",
    "                optimizer, mode='max', factor=0.1, patience=4, \n",
    "                verbose=True, threshold=0.01, threshold_mode='abs'\n",
    "            ) \n",
    "            for optimizer in optimizer_list\n",
    "        ]\n",
    "    \n",
    "    def step(self, test_accuracy):\n",
    "        for scheduler in self.lr_scheduler_list:\n",
    "            scheduler.step(test_accuracy)\n",
    "        \n",
    "n_epochs = 20\n",
    "n_batches = ceil(train_size/batch_size)\n",
    "\n",
    "# total number of batches in the train set\n",
    "n_batches"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0  2.914 3.055  0.323 0.328  0.597 0.610  79.101\n",
      "1  2.707 3.220  0.360 0.333  0.640 0.615  75.663\n",
      "2  2.675 2.986  0.370 0.344  0.646 0.616  75.781\n",
      "3  2.670 3.048  0.370 0.334  0.646 0.611  75.690\n",
      "4  2.644 3.014  0.373 0.344  0.654 0.616  75.702\n",
      "5  2.645 3.283  0.373 0.305  0.650 0.583  75.717\n",
      "6  2.628 3.240  0.377 0.312  0.656 0.586  75.659\n",
      "7  2.619 3.276  0.379 0.311  0.657 0.578  75.600\n",
      "Epoch     7: reducing learning rate of group 0 to 1.0000e-04.\n",
      "Epoch     7: reducing learning rate of group 1 to 1.0000e-04.\n",
      "Epoch     7: reducing learning rate of group 2 to 1.0000e-04.\n",
      "Epoch     7: reducing learning rate of group 3 to 1.0000e-04.\n",
      "Epoch     7: reducing learning rate of group 4 to 1.0000e-04.\n",
      "Epoch     7: reducing learning rate of group 0 to 1.0000e-04.\n",
      "Epoch     7: reducing learning rate of group 0 to 1.0000e-04.\n",
      "8  2.512 2.805  0.399 0.380  0.678 0.660  75.635\n",
      "9  2.482 2.810  0.406 0.371  0.681 0.644  75.663\n",
      "10  2.478 2.745  0.405 0.384  0.684 0.656  75.628\n",
      "11  2.470 2.674  0.409 0.396  0.686 0.670  75.706\n",
      "12  2.467 2.741  0.410 0.386  0.685 0.665  75.649\n",
      "13  2.465 2.843  0.410 0.377  0.686 0.652  75.716\n",
      "14  2.461 2.768  0.409 0.385  0.686 0.664  75.724\n",
      "15  2.461 2.674  0.410 0.400  0.686 0.682  75.678\n",
      "16  2.460 2.966  0.411 0.360  0.686 0.635  75.679\n",
      "Epoch    16: reducing learning rate of group 0 to 1.0000e-05.\n",
      "Epoch    16: reducing learning rate of group 1 to 1.0000e-05.\n",
      "Epoch    16: reducing learning rate of group 2 to 1.0000e-05.\n",
      "Epoch    16: reducing learning rate of group 3 to 1.0000e-05.\n",
      "Epoch    16: reducing learning rate of group 4 to 1.0000e-05.\n",
      "Epoch    16: reducing learning rate of group 0 to 1.0000e-05.\n",
      "Epoch    16: reducing learning rate of group 0 to 1.0000e-05.\n",
      "17  2.426 2.776  0.417 0.387  0.693 0.667  75.709\n",
      "18  2.418 2.722  0.418 0.396  0.694 0.675  75.674\n",
      "19  2.422 2.691  0.418 0.396  0.693 0.672  75.681\n",
      "CPU times: user 20min 52s, sys: 4min 25s, total: 25min 17s\n",
      "Wall time: 25min 17s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "optimizer_list=[optimizer, optimizer_fp, optimizer_sf]\n",
    "\n",
    "def optimization_step_fn(model, loss, x_batch, y_batch):\n",
    "    return optimization_step(\n",
    "        model, loss, x_batch, y_batch, \n",
    "        optimizer_list=optimizer_list,\n",
    "        t=HYPERPARAMETER_T\n",
    "    )\n",
    "all_losses = train(\n",
    "    model, loss, optimization_step_fn,\n",
    "    train_iterator, val_iterator, n_epochs,\n",
    "    lr_scheduler=lr_scheduler_list(optimizer_list)\n",
    ")\n",
    "# epoch logloss  accuracy    top5_accuracy time  (first value: train, second value: val)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Loss/epoch plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fed0c6b2518>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "epochs = [x[0] for x in all_losses]\n",
    "plt.plot(epochs, [x[1] for x in all_losses], label='train');\n",
    "plt.plot(epochs, [x[2] for x in all_losses], label='val');\n",
    "plt.legend();\n",
    "plt.xlabel('epoch');\n",
    "plt.ylabel('loss');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nleuEbngJJhcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fed0c37bbe0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, [x[3] for x in all_losses], label='train');\n",
    "plt.plot(epochs, [x[4] for x in all_losses], label='val');\n",
    "plt.legend();\n",
    "plt.xlabel('epoch');\n",
    "plt.ylabel('accuracy');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fed562234a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(epochs, [x[5] for x in all_losses], label='train');\n",
    "plt.plot(epochs, [x[6] for x in all_losses], label='val');\n",
    "plt.legend();\n",
    "plt.xlabel('epoch');\n",
    "plt.ylabel('top5_accuracy');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Save"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.cpu();\n",
    "torch.save(model.state_dict(), 'model_ternary_quantization.pytorch_state')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
